package com.ruoyi.project.cms.mm.move.controller;

import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.project.cms.mm.move.domain.Move;
import com.ruoyi.project.cms.mm.move.service.MoveService;
import com.ruoyi.project.cms.mm.task.domain.TaskInfo;
import com.ruoyi.project.cms.mm.task.service.TaskInfoService;
import com.ruoyi.project.system.user.domain.User;
import com.ruoyi.project.system.user.service.IUserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

/**
 * @author Administrator
 * @create 2020-05-19 9:28
 * @desc 任务移交控制类
 **/
@Controller
@RequestMapping("/cms/mm/move")
public class MoveController extends BaseController {
    private String prefix = "cms/mm/move";
    @Autowired
    private MoveService moveService;
    @Autowired
    private TaskInfoService taskInfoService;
    @Autowired
    private IUserService userService;

    @RequiresPermissions("cms:task:create")
    @GetMapping()
    public String move() {
        return prefix + "/move";
    }

    /**
     * 查询多个延期申请
     *
     * @param move
     * @return
     */
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(Move move) {
        //我自己只能看到申请人是自己的转移申请
        System.out.println("进入查询方法");
        //获取当前登录的用户,对应的就是数据库表中的clogname字段
        User user = (User) SecurityUtils.getSubject().getPrincipal();
        move.setAlogname(user.getLoginName());
        //开启分页
        startPage();
        List<Move> list = moveService.selectMoreMoves(move);
        System.out.println(list);
        return getDataTable(list);
    }

    //跳转新增转移申请页面
    @GetMapping("/addMove")
    public String addMove(ModelMap map) {
        System.out.println("进入跳转新增转移申请页面");
        //这个页面有两个下拉框，需要动态获得数据
        //1.根据当前登录的用户，在taskInfo表中查询执行人为当前用户的所有任务，返回list
        User user = (User) SecurityUtils.getSubject().getPrincipal();
        TaskInfo info = new TaskInfo();
        info.setDlogname(user.getLoginName());
        List<TaskInfo> infoList = taskInfoService.selectTaskInfoList(info);
        map.put("taskInfo",infoList);
        //2.在user表中查询所有的用户
        List<User> users = userService.selectUserList(new User());
        map.put("users",users);
        //3.需要把当前用户传到前台页面
        map.put("user",user);
        return prefix + "/addMove";
    }
    //执行新增申请操作
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult add(Move move) {
        System.out.println("执行新增申请操作");
        System.out.println(move);
//        根据tid查询审批人
        move.setNextauditor(taskInfoService.selectTaskInfoByTid(move.getTid()).getClogname());
//        设置创建时间为当前时间
        move.setCdate(new Date());
//        设置初始状态
        move.setStatus(0);
        return toAjax(moveService.addMove(move));
    }

    //执行删除操作
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids) {
        System.out.println("执行删除操作");
        return toAjax(moveService.deleteByMid(ids));
    }

    //跳转编辑页面
    //    打开编辑页面
    @GetMapping("/edit/{mid}")
    public String edit(@PathVariable("mid") Integer mid, ModelMap map) {
        System.out.println("打开编辑页面");
        System.out.println(mid);
        //根据mid从数据库中把对应的数据传输到前台页面
        Move move = moveService.selectOneByMid(mid);
        System.out.println(move);
        map.put("move", move);
        List<User> users = userService.selectUserList(new User());
        map.put("users",users);
        return prefix + "/editMove";
    }
//    执行编辑操作
    @PostMapping("/editMove")
    @ResponseBody
    public AjaxResult editMove(Move move) {
        System.out.println("执行编辑操作");
        System.out.println(move);
        return toAjax(moveService.edit(move));
    }

//    跳转转移审批页面
    @GetMapping("/moveApprv")
    public String moveApprv() {
        System.out.println("跳转转移审批页面");
        return prefix + "/moveApprv";
    }

    @PostMapping("/apprvlist")
    @ResponseBody
    public TableDataInfo apprvList(ModelMap map) {
        // 这个页面展示的是nextauditor是当前登录的用户，且status不等于2（审批完成）的结果
        User user = (User) SecurityUtils.getSubject().getPrincipal();
        startPage();
        List<Move> list = moveService.selectByNextAndStatus(user.getLoginName(),2);
        return getDataTable(list);
    }

//    执行打开审批对话框的操作
    @GetMapping("/apprv/{mid}")
    public String Apprv(@PathVariable("mid") Integer mid,ModelMap map) {
        System.out.println("执行打开审批对话框的操作");
        Move move = moveService.selectOneByMid(mid);
        map.put("move",move);
        return prefix + "/apprv";
    }
//    跳转详情页面
    @GetMapping("/moveDetail/{mid}")
    public String moveDetail(@PathVariable("mid")Integer mid,ModelMap map) throws Exception {
        System.out.println("跳转详情页面");
        Move move = moveService.selectOneByMid(mid);
        System.out.println(move);
        if (move != null) {
            map.put("move", move);
        } else {
            map.put("move",new Move());
        }
        return prefix + "/moveDetail";
    }

//    执行审批操作
    @PostMapping("/apprvMove")
    @ResponseBody
    public AjaxResult doApprv(Move move) {
        System.out.println("开始执行审批操作");
        move.setAdate(new Date());
        System.out.println(move);
        moveService.doApprv(move);
        return toAjax(1);
    }

    @PostMapping("/checkTidUnique")
    @ResponseBody
    public Integer checkTidUnique(Integer tid) {
        if (tid == 0) {
//            没有选择
            return 0;
        } else {
//            数据库中根据tid查找,条件：创建者为当前用户，tid为用户选择的tid
            User user = (User) SecurityUtils.getSubject().getPrincipal();
            String alogname = user.getLoginName();
            Move move = moveService.selectByTid(tid,alogname);
//            有数据，但是已完成的时候
            if (move != null && move.getStatus() != 2) {
                return 1;
            } else {
                return 0;
            }
        }
    }

    @PostMapping("/checkOlognameUnique")
    @ResponseBody
    public Integer checkOlognameUnique(String ologname) {
        System.out.println(ologname);
        User user = (User) SecurityUtils.getSubject().getPrincipal();
        if (ologname == null || ologname == "") {
            return 1;
        } else if (ologname.equals(user.getLoginName())) {
//            不能选择当前用户为移交人
                return 1;
            } else {
                return 0;
            }
    }
}
